package org.tnc.budget.service;

import java.util.Date;
import java.util.List;

import org.tnc.budget.model.AttachmentTable;
import org.tnc.budget.model.EventTable;
import org.tnc.model.User;

/**
 * 约会与事件管理器
 * 
 * @author houjj | 2011-4-4 下午04:06:27
 */
public interface EventManager {
	/**
	 * 查询约会事件
	 * 
	 * @param eventId
	 * @return
	 */
	EventTable getEventById(int eventId);

	/**
	 * 查询约会事件,包含附件
	 * 
	 * @param eventId
	 * @return
	 */
	EventTable getEventWithAttachments(int eventId);
	
	/**
	 * 查询附件
	 * @param attachmentId
	 * @return
	 */
	AttachmentTable getAttachmentTableById(int attachmentId);

	/**
	 * 保存一条事件记录
	 * 
	 * @param event
	 */
	void saveEventTable(EventTable event);

	/**
	 * 强制更新对象
	 * 
	 * @param event
	 */
	void updateEventTable(EventTable event);

	/**
	 * 删除一条事件记录
	 * 
	 * @param event
	 */
	void deleteEventTable(EventTable event);

	/**
	 * 查询指定用户（name）在某年某月的事件记录。
	 * @param year
	 * @param month
	 * @param name
	 * @return
	 */
	List<EventTable> getEventByMonth(int year, int month, Long name);
	
	/**
	 * 查询指定用户（userId）在给定时间区间[startTime, endTime]之间的事件记录
	 * @param startTime
	 * @param endTime
	 * @param userId
	 * @return
	 */
	List<EventTable> findUserEventsByTime(String startTime, String endTime, Long userId);
	
	/**
	 * 查询一批用户(userIds)在给定时间区间[startTime, endTime]之间的事件记录
	 * @param startTime
	 * @param endTime
	 * @param userIds
	 * @return
	 */
	List<EventTable> findUserEventsByTimeAndIds(String startTime, String endTime, Long [] userIds);

	/**
	 * 查询指定预算中心在给定时间区间[startTime, endTime]之间的事件记录
	 * @param startTime
	 * @param endTime
	 * @param bcId
	 * @return
	 */
	List<EventTable> findUserEventsByTimeAndBC(String startTime, String endTime, Integer bcId);
	
	/**
	 * 查询一批用户 指定预算中心在给定时间区间[startTime, endTime]之间的事件记录
	 * @return
	 */
	List<EventTable> findUserEvents(String startTime, String endTime, Integer bcId, Long [] userIds);
	
	/**
	 * 根据客户端事件id查询
	 * @param uid
	 * @param clientId
	 * @return
	 */
	List<EventTable> getEventByClientEventID(Long uid, String clientId);

	/**
	 * 更新指定客户端ID的事件为无效
	 * 
	 * @param u
	 * @param ids
	 */
	boolean saveUnvalidEventTable(User u, String[] ids);

	/**
	 * 删除附件
	 * 
	 * @param attachmentTable
	 */
	void deleteAttachmentTable(AttachmentTable attachmentTable);

	/**
	 * 删除指定ID的多个附件
	 * 
	 * @param attachIds
	 */
	void deleteAttachmentTable(List<Integer> attachIds);
	/**
	 * 删除指定事件的所有附件
	 * @param et
	 */
	void deleteAttachmentsByEventId(EventTable et);
	
	/**
	 * 删除指定事件
	 * @param id
	 */
	void deleteEventById(Integer id);
	
	/**
	 * 删除全天事件（duration超过24小时的）
	 */
	void delete24HoursEvents();
	
	/**
	 * 自动审核上个月的事件。
	 */
	void autoReviewLastMonth();
	
	/**
	 * 
	 * @param value
	 */
	void setAutoReviewDayOfMonth(int value);
	
	/**
	 * 
	 * @return
	 */
	int getAutoReviewDayOfMonth();
}
